Fix inconsistency in GTK_WIDGET_SAVED_STATE (#435840, Xan Lopez)
authorCody Russell <bratsche@gnome.org>
Wed, 13 Jun 2007 14:17:53 +0000 (14:17 +0000)
committerCody Russell <bratsche@src.gnome.org>
Wed, 13 Jun 2007 14:17:53 +0000 (14:17 +0000)
2007-06-13  Cody Russell  <bratsche@gnome.org>

       * gtk/gtkwidget.c: Fix inconsistency in GTK_WIDGET_SAVED_STATE
       (#435840, Xan Lopez)

svn path=/trunk/; revision=18122

ChangeLog
gtk/gtkwidget.c

index cc2740b7360bcc0411df2f1fb9516fed43b8ccfb..50583173b4b11a91da6896d92b2fd1457ef3a8d5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2007-06-13  Cody Russell  <bratsche@gnome.org>
+
+       * gtk/gtkwidget.c: Fix inconsistency in GTK_WIDGET_SAVED_STATE
+       (#435840, Xan Lopez)
+
 2007-06-13  Kristian Rietveld  <kris@imendio.com>
 
        * gtk/gtk.symbols
index 480b3ce2e00f6c3318c0ee4f45732079de8415b7..e6741e45debe5a885e85e88bf5d7ed8b9fae3d43 100644 (file)
@@ -7561,36 +7561,28 @@ static void
 gtk_widget_propagate_state (GtkWidget           *widget,
                            GtkStateData        *data)
 {
-  guint8 old_state;
+  guint8 old_state = GTK_WIDGET_STATE (widget);
+  guint8 old_saved_state = GTK_WIDGET_SAVED_STATE (widget);
 
   /* don't call this function with state==GTK_STATE_INSENSITIVE,
    * parent_sensitive==TRUE on a sensitive widget
    */
 
-  old_state = GTK_WIDGET_STATE (widget);
 
   if (data->parent_sensitive)
-    {
-      GTK_WIDGET_SET_FLAGS (widget, GTK_PARENT_SENSITIVE);
+    GTK_WIDGET_SET_FLAGS (widget, GTK_PARENT_SENSITIVE);
+  else
+    GTK_WIDGET_UNSET_FLAGS (widget, GTK_PARENT_SENSITIVE);
 
-      if (GTK_WIDGET_IS_SENSITIVE (widget))
-       {
-         if (data->state_restoration)
-           GTK_WIDGET_STATE (widget) = GTK_WIDGET_SAVED_STATE (widget);
-         else
-           GTK_WIDGET_STATE (widget) = data->state;
-       }
+  if (GTK_WIDGET_IS_SENSITIVE (widget))
+    {
+      if (data->state_restoration)
+        GTK_WIDGET_STATE (widget) = GTK_WIDGET_SAVED_STATE (widget);
       else
-       {
-         GTK_WIDGET_STATE (widget) = GTK_STATE_INSENSITIVE;
-         if (!data->state_restoration &&
-             data->state != GTK_STATE_INSENSITIVE)
-           GTK_WIDGET_SAVED_STATE (widget) = data->state;
-       }
+        GTK_WIDGET_STATE (widget) = data->state;
     }
   else
     {
-      GTK_WIDGET_UNSET_FLAGS (widget, GTK_PARENT_SENSITIVE);
       if (!data->state_restoration)
        {
          if (data->state != GTK_STATE_INSENSITIVE)
@@ -7610,19 +7602,19 @@ gtk_widget_propagate_state (GtkWidget           *widget,
        gtk_window_set_focus (GTK_WINDOW (window), NULL);
     }
 
-  if (old_state != GTK_WIDGET_STATE (widget))
+  if (old_state != GTK_WIDGET_STATE (widget) ||
+      old_saved_state != GTK_WIDGET_SAVED_STATE (widget))
     {
       g_object_ref (widget);
-      
+
       if (!GTK_WIDGET_IS_SENSITIVE (widget) && GTK_WIDGET_HAS_GRAB (widget))
        gtk_grab_remove (widget);
-      
+
       g_signal_emit (widget, widget_signals[STATE_CHANGED], 0, old_state);
-      
+
       if (GTK_IS_CONTAINER (widget))
        {
          data->parent_sensitive = (GTK_WIDGET_IS_SENSITIVE (widget) != FALSE);
-         data->state = GTK_WIDGET_STATE (widget);
          if (data->use_forall)
            gtk_container_forall (GTK_CONTAINER (widget),
                                  (GtkCallback) gtk_widget_propagate_state,